
package model;

import java.io.Serializable;

public class Conta implements Serializable {
    private int saldo;
    private Usuario usuario;
    private Artista artista;

    /**
     * Construtor utilizado para vincular a conta a um Usuário
     * @param saldo saldo atual da conta
     * @param usuario usuario dono da conta
     */
    public Conta(int saldo, Usuario usuario) {
        this.saldo = saldo;
        this.artista = null;
        this.usuario = usuario;
    }
    
    /**
     * Construtor utilizado para vincular a conta a um Artista
     * @param saldo saldo atual da conta
     * @param artista artista dono da conta
     */
    public Conta(int saldo, Artista artista) {
        this.saldo = saldo;
        this.artista = artista;
        this.usuario = null;
    }

    /**
     * 
     * @return saldo atual da conta
     */
    public int getSaldo() {
        return saldo;
    }
    /**
     * 
     * @return usuario dono da conta (null caso a conta pertensa a um usuário)
     */
    public Usuario getUsuario(){
        return usuario;
    }
    /**
     * 
     * @return artista dono da conta (null caso a conta pertensa a um artista)
     */
    public Artista getArtista() {
        return artista;
    }
        
    /**
     * 
     * @param valor valor a ser debitado da conta
     * @return true se foi possível debitar o valor da conta, false caso contrário
     */
    public boolean debitar(int valor){
        if (valor > this.saldo || valor < 0) return false;
        else{
            this.saldo -= valor;
            return true;
        }
    }

    /**
     * 
     * @param valor valor a ser creditado na conta
     * @return false se valor < 0, true caso contrário
     */
    public boolean creditar(int valor){
        if (valor < 0) return false;
        else {
            this.saldo+= valor;
            return true;
        }
    }
    
    public String getValorFormatado() {
        return "R$ " + saldo/100 + "," + String.format("%02d", saldo%100);
    } 
    
    @Override
    public String toString() {
        return "Saldo: R$ " + saldo/100 + "," + String.format("%02d", saldo%100);
    }      
    
    @Override
    public boolean equals(Object obj){
        
        Conta outra = (Conta) obj;
        
        if (this.artista != null & outra.artista != null){
            //System.out.println("AN & AN");
            return this.artista.equals(outra.artista);
            
        } else if (this.usuario != null & outra.usuario != null){
            //System.out.println("UN & UN");
            return this.usuario.equals(outra.usuario);
        } else return false;
    }
}